In computer networks, such as the Internet, web servers receive and fulfill requests for data made by a data client such as a web browser running on one or more client computers. Once a request has been received by a web server, the web server processes the request according to a protocol such as HyperText Transfer Protocol (“HTTP”). HTTP defines how messages are formatted and transmitted, and what actions web servers and clients should take in response to various commands. For example, when a URL for a web page is entered in a browser, an HTTP command is sent to a web server directing it to fetch and transmit the requested web resource. Web servers are capable of sending data to many client computers at the same time, thus allowing multiple client computers to obtain the same web resource simultaneously. The functionality of web servers is provided by software applications installed on computers connected to a network.
Existing web servers are highly specialized software programs that provide a large set of features necessary to serve a wide variety of resource types, and support various aspects of the HTTP protocol, such as request authentication and caching of resources. These features are normally tightly integrated inside the web server implementation for performance reasons, and provide little extensibility to the end consumer. This makes it difficult to customize the behavior of the web server by removing unneeded features, or replacing them with custom implementations. The provided extensibility model is normally restrictive, difficult to use due to the highly specialized nature of the system, and exposes few aspects of the server operation. The development of extended functionality for such systems traditionally incurs high costs due to their complexity and cost of development.
The need for more control over the responses served by web servers and ability to rapidly develop web applications for serving rich dynamic content has led to the creation of many scripting or application development layer implementations (such as Active Server Pages (“ASP”), Hypertext Preprocessor (“PHP”), and ASP.NET). These platforms provide richer interfaces as well as utility functionality to aid in developing dynamic web applications, and utilize higher level languages to simplify the task of application development. However, these application development layer implementations have traditionally been limited due to being layered on top of web server products and the resulting inability to provide low level control over request processing. Additionally, these platforms frequently duplicate processing tasks that are already implemented by the web server and that power the application development layer, resulting in reduced performance due to increased runtime and memory demands of the application development layer, and administrative overhead in managing each duplicated feature twice.
It is with respect to these considerations and others that the various embodiments of the present invention have been made.